1. Technical Field
The present disclosure pertains to the field of printing and in particular, to systems and methods for framebuffer management.
2. Description of Related Art
Document processing software allows users to view, edit, process, store, and print documents conveniently. However, before a document can be printed, pages in the document are often described in a page description language (“PDL”). As used in this document PDL's include languages used to describe pages in a document such as PostScript, Adobe PDF, HP PCL, Microsoft XPS, and variants thereof. PDL descriptions provide a high-level portrayal of each page in a document and are often translated to a series of lower-level printer-specific commands when the document is being printed—a process termed rasterization. Although the rasterization process may be complex and depend on the features and capabilities offered by a particular printer, flexible and portable general-purpose rasterization schemes may allow printer performance optimizations based on available memory, desired print speed, cost, and other criteria.
Traditionally, memory in printing systems has been organized in two distinct pools comprising display list memory and frame buffer memory. Display list memory typically holds display list objects for rasterization, while the frame buffer memory typically holds image data specifying marks to be made on a printed page. A bitmap is a type of memory organization used to store digital images, in which each pixel is assigned a single bit (i.e. the pixel is either “on” or “off”). The term pixmap (or pixel map) is used to denote a raster image that can exist at a number of bit depths. Because of the separate nature of the two pools, display list memory cannot typically be used for frame buffer purposes, and vice versa. Therefore, print failures can occur due to insufficient memory in one pool even if there is sufficient available memory in the other pool. Moreover, the use of separate routines to manage the two distinct pools may make it difficult to modify and maintain the code used to manage memory across a product family because different strategies and optimizations may be used in individual products.
Memory resource optimizations may be important even in situations where the entire memory is treated as a single pool. For example, pixmaps in frame buffers have traditionally used variable-sized contiguous chunks of memory, which leads to memory fragmentation. Fragmentation causes available memory to be scattered in small unusable blocks preventing satisfaction of some memory allocation requests, even though the aggregate of the available memory in the small blocks could have satisfied the memory request if the small blocks were contiguous.
Where the memory is shared between the display list and frame buffer, memory optimizations become important in ensuring that each pool has adequate available memory during printer operation and that potentially available memory is not lost due to inefficiencies in allocation. At a global level, the optimization strategies may ensure that memory is allocated between display list and framebuffer memory to meet printer design goals such as cost and/or print speed. In addition, localized display list and framebuffer specific optimizations ensure that optimizations available at a lower level are exploited. In inexpensive printers, efficient memory resource may allow design functionality to be achieved using relatively lower memory. In high-end printers, efficient use of memory may allow for greater real-time availability of memory for printing applications and lead to performance improvements.
Thus, there is a need for systems and methods to manage memory on printers for rasterization, including framebuffer memory that would allow an optimal use of memory resources, while providing a seamless upgrade path.